package com.migration.service;

import com.migration.model.newdb.RiskChainConsequence;
import com.migration.model.olddb.*;
import jakarta.persistence.EntityManager;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 事故链-后果表服务接口
 */
public interface RiskChainConsequenceService {

    /**
     * 迁移后果节点数据
     *
     * @param oldEntityManager 旧数据库实体管理器
     * @param newEntityManager 新数据库实体管理器
     * @param consequenceMap 后果节点映射
     * @param sourceIdToConsequenceIds 原ID与后果节点ID的映射
     * @param detailList 事故链详情列表
     * @param reasonMap 原因ID到原因实体的映射
     * @return 迁移的后果节点列表
     */
    List<RiskChainConsequence> migrateConsequenceData(
        EntityManager oldEntityManager,
        EntityManager newEntityManager,
        Map<Long, RaConsequence> consequenceMap,
        Map<Long, Set<Long>> sourceIdToConsequenceIds,
        List<RaFaultChainsDetail> detailList,
        Map<Long, RaDeviateReason> reasonMap
    );

    /**
     * 迁移事故链-后果节点关联数据（物料）
     *
     * @param oldEntityManager 旧数据库实体管理器
     * @param newEntityManager 新数据库实体管理器
     * @param consequenceList 后果节点列表
     * @return 迁移的关联数据行数
     */
    int migrateConsequenceChemicalData(
        EntityManager oldEntityManager,
        EntityManager newEntityManager,
        List<RaConsequence> consequenceList
    );

    /**
     * 获取所有未删除的后果节点数据
     *
     * @param oldEntityManager 旧数据库实体管理器
     * @return 后果节点数据列表
     */
    List<RaConsequence> getAllConsequences(EntityManager oldEntityManager);

    /**
     * 构建后果节点ID映射
     *
     * @param consequenceList 后果节点列表
     * @return 后果节点ID映射
     */
    Map<Long, RaConsequence> buildConsequenceMap(List<RaConsequence> consequenceList);

    /**
     * 构建源ID与后果节点ID的映射
     *
     * @param measureList 事故链措施关系列表
     * @return 源ID与后果节点ID的映射
     */
    Map<Long, Set<Long>> buildSourceIdToConsequenceIdsMap(List<RaFaultChainsMeasure> measureList);
}
